home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / THINKC / TCL1 / __MANDEL / MANDELBR / CMANDELH.C < prev    next >
Text File  |  1992-03-28  |  1KB  |  68 lines

  1. //    CMandelHLinePhase.c
  2.  
  3. #include "CMandelHLinePhase.h"
  4.  
  5. extern long    gTickLimit;
  6.  
  7. CMandelPhase *
  8. CMandelHLinePhase::Perform(void)
  9. {
  10.     asm
  11.     {
  12.         fmovem        fp4-fp7,-(sp)
  13.         move.l        a3,-(sp)
  14.         
  15.         move.l        (this),a3
  16.         fmove.x        CMandelHLinePhase.itsScale(a3),fp0
  17.         move.w        CMandelHLinePhase.itsMaxDwell(a3),d2
  18.         
  19.         fmove.x        CMandelHLinePhase.itsHStart(a3),fp6
  20.         fmove.x        CMandelHLinePhase.itsVStart(a3),fp7
  21.         
  22.         move.w        CMandelHLinePhase.itsLength(a3),d1
  23.         move.l        CMandelHLinePhase.itsDwellsH(a3),a1
  24.         move.l        (a1),a0
  25.         adda.l        CMandelHLinePhase.itsIndex(a3),a0
  26.     @0:
  27.         move.l        Ticks,d0
  28.         cmp.l        gTickLimit,d0
  29.         bgt            @4
  30.         
  31.         move.w        d2,d0
  32.         fmove.x        fp6,fp2            ; Z.a = Z0.a
  33.         fmove.x        fp7,fp5            ; Z.b = Z0.b
  34.         bra            @2
  35.     @1:
  36.         fsub.x        fp3,fp2
  37.         fmul.x        fp4,fp5
  38.         fscale.x    #1.0,fp5
  39.         fadd.x        fp6,fp2            ; ZZ.a += Z0.a
  40.         fadd.x        fp7,fp5            ; ZZ.b += Z0.b
  41.     @2:
  42.         fmove.x        fp2,fp4            ; Z = ZZ
  43.         fmul.x        fp4,fp2            ; temp = ZZ.a * ZZ.a + ZZ.b * ZZ.b
  44.         fmove.x        fp5,fp3
  45.         fmul.x        fp5,fp3
  46.         fmove.x        fp2,fp1
  47.         fadd.x        fp3,fp1
  48.         fcmp.x        #4.0,fp1
  49.         fbgt        @3
  50.         dbra        d0,@1
  51.     @3:
  52.         move.w        d0,(a0)+
  53.         fadd.x        fp0,fp6
  54.         dbra        d1,@0
  55.         move.l        CMandelHLinePhase.itsNextPhase(a3),d0
  56.         bra            @5
  57.     @4:
  58.         fmove.x        fp6,CMandelHLinePhase.itsHStart(a3)
  59.         move.w        d1,CMandelHLinePhase.itsLength(a3)
  60.         suba.l        (a1),a0
  61.         move.l        a0,CMandelHLinePhase.itsIndex(a3)
  62.         clr.l        d0
  63.     @5:
  64.         move.l        (sp)+,a3
  65.         fmovem        (sp)+,fp4-fp7
  66.     }
  67. }
  68.